﻿/**
 *
 * @file FITKAcousticsNCTUserDefined.h
 * @brief 自定义声学包
 * @author liuzhiyuan(liuzhiyuan@diso.cn)
 * @date 2024-11-1
 *
 */
#ifndef FITKACOUSTICSNCTUSERDEFINED_H
#define FITKACOUSTICSNCTUSERDEFINED_H

#include "FITKAcousticsNCTLayUp.h"
#include "FITKAcousticsPhysicsAPI.h"

namespace Acoustics
{
/**
     * @brief 自定义声学包
     * @author liuzhiyuan(liuzhiyuan@diso.cn)
     * @date 2024-11-1
     */
    class FITKAcousticsPhysicsAPI FITKAcousticsNCTUserDefined : public FITKAcousticsAbsNCT
    {
        FITKCLASS(Acoustics, FITKAcousticsNCTUserDefined);
    public:
        /**
         * @brief 构造函数
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        explicit FITKAcousticsNCTUserDefined() = default;
        /**
         * @brief 析构函数
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        virtual ~FITKAcousticsNCTUserDefined() = default;
        /**
         * @brief 获取层类型
         * @return FITKAcousticsAbsNCT::NCTType
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        virtual FITKAcousticsAbsNCT::NCTType getNCTType() override;
        /**
         * @brief 单位面积的质量
         * @return double
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        double getMassPerUnitArea()const { return _massPerUnitArea; }

        /**
         * @brief 设置单位面积质量
         * @param massPerUnitArea 单位面积质量
         * @return void
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        void setMassPerUnitArea(double massPerUnitArea) { _massPerUnitArea = massPerUnitArea; }

        /**
         * @brief 获取吸收系数ID
         * @return int 吸收系数ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getAbsorptionCoeffID() const { return _absorptionCoeffID; }

        /**
         * @brief 设置吸收系数ID
         * @param absorptionCoeffID 吸收系数ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @return void
         * @date 2024-11-01
         */
        void setAbsorptionCoeffID(int absorptionCoeffID) { _absorptionCoeffID = absorptionCoeffID; }

        /**
         * @brief 获取插入丢失共振ID
         * @return int 插入丢失共振ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getInsertionLossResonantID() const { return _insertionLossResonantID; }

        /**
         * @brief 设置插入丢失共振ID
         * @param insertionLossResonantID 插入丢失共振ID
         * @return void
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        void setInsertionLossResonantID(int insertionLossResonantID) { _insertionLossResonantID = insertionLossResonantID; }

        /**
         * @brief 获取插入丢失非共振ID
         * @return int 插入丢失非共振ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getInsertionLossNonResonantID() const { return _insertionLossNonresonantID; }

        /**
         * @brief 设置插入丢失非共振ID
         * @param insertionLossNonresonantID 插入丢失非共振ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @return void
         * @date 2024-11-01
         */
        void setInsertionLossNonResonantID(int insertionLossNonresonantID) { _insertionLossNonresonantID = insertionLossNonresonantID; }

        /**
         * @brief 获取阻尼弯曲ID
         * @return int 阻尼弯曲ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getDampingFlexureID() const { return _dampingFlexureID; }

        /**
         * @brief 设置阻尼弯曲ID
         * @param dampingFlexureID 阻尼弯曲ID
         * @return void
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        void setDampingFlexureID(int dampingFlexureID) { _dampingFlexureID = dampingFlexureID; }

        /**
         * @brief 获取阻尼剪切ID
         * @return int 阻尼剪切ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getDampingShearID() const { return _dampingShearID; }

        /**
         * @brief 设置阻尼剪切ID
         * @param dampingShearID 阻尼剪切ID
         * @return void
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        void setDampingShearID(int dampingShearID) { _dampingShearID = dampingShearID; }

        /**
         * @brief 获取阻尼扩展ID
         * @return int 阻尼扩展ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-01
         */
        int getDampingExtensionID() const { return _dampingExtensionID; }

        /**
         * @brief 设置阻尼扩展ID
         * @param dampingExtensionID 阻尼扩展ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @return void
         * @date 2024-11-01
         */
        void setDampingExtensionID(int dampingExtensionID) { _dampingExtensionID = dampingExtensionID; }
        /**
         * @brief 数据是否被使用（关联）
         * @param[i]  data           被检查的数据ID
         * @return true              管理器中使用了Data中包含的数据
         * @return false             管理器中没有使用Data中包含的数据
         * @author libaojun (libaojunqd@foxmail.com)
         * @date 2025-02-08
         */
        virtual bool isUsedDataObject(const QList<int> & dataIDs) override;
    private:
        /**
         * @brief  单位面积质量
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        double _massPerUnitArea {0.0};
        /**
         * @brief  吸收系数ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _absorptionCoeffID {-1};
        /**
         * @brief  插入丢失共振ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _insertionLossResonantID {-1};
        /**
         * @brief  插入丢失非共振ID
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _insertionLossNonresonantID {-1};
        /**
         * @brief  滑动弯曲
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _dampingFlexureID {-1};
        /**
         * @brief  阻尼剪切
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _dampingShearID {-1};
        /**
         * @brief  阻尼扩展
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date   2024-10-15
         */
        int _dampingExtensionID {-1};
    };
}

#endif // FITKACOUSTICSNCTUSERDEFINED_H
